import greenfoot.*; 
import java.util.Random;

/**
 * Representa la clase Personajes,
 * la cual se usa para crear
 * los personajes del juego.
 * 
 * @author Carlos Bretherton.
 * @version 01 de Mayo del 2012.
 */
public class Personajes extends Actor
{
    protected static final int CUBOFIJO = 1;
    protected static final int CUBOMOV = 2; 
    protected static final int JACKFROST = 3;
    protected static final int SNOWBOX = 4;
    protected static final int SNOWBALL = 5;
    protected static final int PINGUINO = 6;
    protected static final int LIFE = 7;
    protected static final int UP = 0;
    protected static final int RIGHT = 1;
    protected static final int DOWN = 2;
    protected static final int LEFT= 3;
    protected JackWorld world;
    protected int px;
    protected int py;
    protected int tipo;
    protected Random r;
    protected GreenfootImage img;
    
    /**
     * Constructor de objetos de la clase
     * Personajes, en el cual asigna una imagen
     * al objeto de acuerdo al tipo de personaje. 
     * @param Tipo Define el tipo de personaje.
     * @param x Posición en el eje horizontal;
     * @param y Posición en el eje vertical;
     */
    public Personajes(int Tipo, int x, int y)
    {
        tipo = Tipo;
        switch( tipo )
        {
            case CUBOFIJO: img = new GreenfootImage("cubofijo.png");
            break;
            case CUBOMOV: img = new GreenfootImage("cubomov.png");
            break;
            case JACKFROST: img = new GreenfootImage("jackfrost.png");
            break;
            case SNOWBOX: img = new GreenfootImage("snowbox.png");
            break;
            case SNOWBALL: img = new GreenfootImage("snowball.png");
            break;
            case PINGUINO: img = new GreenfootImage("pingu.png");
            break;
            case LIFE: img = new GreenfootImage("life.png");
            break;
        }
        setImage( img );
        px = x;
        py = y;
    }
    
    /**
     * Actua de los objetos de la clase Personajes,
     * asigna el mundo del objeto a la variable
     * world de tipo JackWorld.
     */
    public void act() 
    {
        world = (JackWorld)getWorld();
    }
    
    /**
     * Mueve el objeto dentro del mundo
     * cuidando no salirse del mapa.
     * @param dir Dirección hacia 
     * donde movera al objeto.
     */
    public void mover(int dir)
    {
        switch( dir )
        {
            case RIGHT: if(px < 14)
                        {
                            if(tipo > 2 && world.Arr[py][px+1] == 0)
                            {
                                px++;
                            }
                            
                            if(tipo < 3)
                            {
                                px++;
                            }
                            setLocation( 18 + (px * 33), 60 + (py * 33) );
                        }
            break;
            case LEFT: if(px > 0)
                       {
                           if(tipo > 2 && world.Arr[py][px-1] == 0)
                           {
                               px--;
                           }
                            
                           if(tipo < 3)
                           {
                               px--;
                           }
                           setLocation( 18 + (px * 33), 60 + (py * 33) );
                       }
            break;
            case UP: if(py > 0)
                     {
                         if(tipo > 2 && world.Arr[py-1][px] == 0)
                         {
                             py--;
                         }
                         
                         if(tipo < 3)
                         {
                             py--;
                         }
                         setLocation( 18 + (px * 33), 60 + (py * 33) );
                     }
            break;
            case DOWN: if(py < 14)
                       {
                           if(tipo > 2 && world.Arr[py+1][px] == 0)
                           {
                               py++;
                           }
                         
                           if(tipo < 3)
                           {
                               py++;
                           }
                           setLocation( 18 + (px * 33), 60 + (py * 33) );
                       }
            break;
        }
    }

    /**
     * Elimina el objeto del mundo.
     */
    public void destruir()
    {
        world.removeObject(this);
    }
}
